package com.zyj.core.factory;

import com.zyj.core.config.Configuration;
import com.zyj.core.executor.Executor;
import com.zyj.core.sqlsessoin.DefaultSqlSession;
import com.zyj.core.sqlsessoin.SqlSession;

/**
 * 使用的是工厂方法设计模式
 */
public class DefaultSqlSessionFactory implements SqlSessionFactory {
    private Configuration configuration;

    public DefaultSqlSessionFactory(Configuration configuration) {
        this.configuration = configuration;
    }

    /**
     * 整个这个方法其实做的事情就是根据配置信息获取Executor
     * <p>
     * 并且将获取到的Executor让SqlSession所持有
     *
     * @return
     */
    @Override
    public SqlSession openSession() {

        /**
         * 根据配置信息，获取Executor
         */
        // 一种是默认simple
        // 一种是全局的配置
        // 一种是制定的ExecutorType
        Executor executor = configuration.newExecutor(null);

        // 将选择到的Executor封装到DefaultSqlSession让DefaultSqlSession对象所持有
        return new DefaultSqlSession(configuration, executor);
    }
}
